package online.dgyj.gifdrawable;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.drawable.Animatable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

import java.io.IOException;

import pl.droidsonroids.gif.GifDrawable;
import pl.droidsonroids.gif.GifImageView;

public class MainActivity extends AppCompatActivity {

    // 用于追踪 GIF 播放状态的标志
    private static boolean status = false;

    // 用于持有 GIF 的引用
    private GifDrawable gifDrawable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 实例化视图
        GifImageView gifImage = findViewById(R.id.gifImage);
        Button statusBtn = findViewById(R.id.statusBtn);
        SeekBar speedSeekBar = findViewById(R.id.speedSeekBar);

        // 实例化 GifDrawable 并为 ImageView 设置图像资源
        try {
            gifDrawable = new GifDrawable(getResources(), R.drawable.gif);
            gifImage.setImageDrawable(gifDrawable);
            // 停止 GIF 播放
            ((Animatable) gifImage.getDrawable()).stop();
        } catch (IOException e) {
            // 在出现异常时抛出运行时异常
            throw new RuntimeException(e);
        }

        // 按钮点击事件监听器
        statusBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 切换 GIF 播放状态
                if (!status) {
                    status = true;
                    // 开始 GIF 播放
                    ((Animatable) gifImage.getDrawable()).start();
                } else {
                    status = false;
                    // 停止 GIF 播放
                    ((Animatable) gifImage.getDrawable()).stop();
                }
            }
        });

        // SeekBar 变化事件监听器
        speedSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (progress == 0) {
                    // 如果进度为 0，停止 GIF 播放
                    ((Animatable) gifImage.getDrawable()).stop();
                } else {
                    // 如果 GIF 正在播放
                    if (((Animatable) gifImage.getDrawable()).isRunning()) {
                        // 设置 GIF 播放速度
                        gifDrawable.setSpeed((float) progress);
                    } else {
                        // 如果 GIF 未在播放，开始播放并设置播放速度
                        ((Animatable) gifImage.getDrawable()).start();
                        gifDrawable.setSpeed((float) progress);
                    }
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // 不需要实现
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // 不需要实现
            }
        });
    }
}
